package com.ogier.app.jeu;

import java.util.ArrayList;

import com.ogier.app.jeu.export.ExportFormat;

/**
 * @author gogier
 *
 */
/**
 * @author gogier
 * 
 */
public class HistoriqueDeplacement {

	/**
	 * Liste des déplacements
	 */
	protected ArrayList<Deplacement>	deplacements;

	/**
	 * Les blancs commencent toujours en premier
	 */
	public HistoriqueDeplacement() {

		deplacements = new ArrayList<Deplacement>();

	}

	/**
	 * ====================
	 * 
	 * INITIALISATION
	 * 
	 * ====================
	 */

	/**
	 * @return
	 */
	public boolean loadHistorique() {
		return false;
	}

	/**
	 * ====================
	 * 
	 * actions
	 * 
	 * ====================
	 */

	/**
	 * @param deplacement
	 */
	public void add(Deplacement deplacement) {
		deplacements.add(deplacement);
	}

	/**
	 * @return
	 */
	public int getNbCoupsJouesTotal() {
		return deplacements.size();
	}

	/**
	 * @return
	 */
	public ArrayList<Deplacement> getHistoriqueDeplacement() {
		return deplacements;
	}

	/**
	 * @return
	 */
	public Deplacement getDernierCoup() {
		if (deplacements.size() != 0) {
			return deplacements.get(deplacements.size() - 1);
		} else {
			return null;
		}
	}

	/**
	 * @param couleur
	 * @return
	 */
	public String getStringHistoriqueDeplacement(int couleur) {
		StringBuilder resultat = new StringBuilder();
		int i = 1;
		for (Deplacement deplacement : getHistoriqueDeplacement(couleur)) {
			resultat.append(i).append(".").append(deplacement.toString()).append(" ");
			i++;
		}

		return resultat.toString();

	}

	/**
	 * @param couleur
	 * @return
	 */
	public ArrayList<Deplacement> getHistoriqueDeplacement(int couleur) {
		ArrayList<Deplacement> resultat = new ArrayList<Deplacement>();
		int i = 0;
		for (Deplacement deplacement : getHistoriqueDeplacement()) {
			if (i % 2 == couleur) {
				resultat.add(deplacement);
			}
			i++;
		}
		return resultat;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return toString(ExportFormat.ECRAN);
	}

	/**
	 * @param format
	 * @return
	 */
	public String toString(int format) {
		StringBuilder resultat = new StringBuilder();
		int i = 1;

		// Format
		switch (format) {

			case (ExportFormat.GOR):
				for (Deplacement deplacement : getHistoriqueDeplacement()) {
					resultat.append(i).append(". ").append(deplacement.toString(format)).append(" ");
					i++;
				}
				break;
			default:
				for (Deplacement deplacement : getHistoriqueDeplacement()) {
					resultat.append(i).append(".").append(deplacement.toString()).append(" ");
					i++;
				}
		}

		return resultat.toString();
	}

	/**
	 * ====================
	 * 
	 * FONCTIONS INTERNES
	 * 
	 * ====================
	 */

}
